跳到主要内容

集体通信函数

以下 MCCL API 提供了一些常用的集体操作。

mcclAllReduce

mcclResult_t mcclAllReduce(const void* sendbuff, void* recvbuff, size_t count, mcclDataType_t datatype, mcclRedOp_t op, mcclComm_t comm, musaStream_t stream)

使用 op 操作将 sendbuff 中长度为 count 的数据数组进行归约,并将结果的相同副本保存在每个 recvbuff 中。

如果 sendbuff == recvbuff,则会发生就地(in-place)操作。

相关链接:AllReduce

mcclBroadcast

mcclResult_t mcclBroadcast(const void* sendbuff, void* recvbuff, size_t count, mcclDataType_t datatype, int root, mcclComm_t comm, musaStream_t stream)

root rank 的sendbuff复制count个元素到所有 rank 的recvbuffsendbuff仅在root rank 上使用,其他 rank 上被忽略。

如果sendbuff == recvbuff,则会发生就地(in-place)操作。

mcclResult_t mcclBcast(void* buff, size_t count, mcclDataType_t datatype, int root, mcclComm_t comm, musaStream_t stream)

mcclBroadcast的旧版就地版本,类似于 MPI_Bcast,弃用。调用

mcclBcast(buff, count, datatype, root, comm, stream)

等同于

mcclBroadcast(buff, buff, count, datatype, root, comm, stream)

相关链接:Broadcast

mcclReduce

mcclResult_t mcclReduce(const void* sendbuff, void* recvbuff, size_t count, mcclDataType_t datatype, mcclRedOp_t op, int root, mcclComm_t comm, musaStream_t stream)

sendbuff 中长度为 count 的数据数组归约到 root rank 的recvbuff上,使用op操作。recvbuff仅在root rank 上使用,其他 rank 上被忽略。

如果sendbuff == recvbuff,则会发生就地(in-place)操作。

相关链接:Reduce

mcclAllGather

mcclResult_t mcclAllGather(const void* sendbuff, void* recvbuff, size_t sendcount, mcclDataType_t datatype, mcclComm_t comm, musaStream_t stream)

从所有GPU收集sendcount个值,并将结果的相同副本保存在每个recvbuff中,来自 rank i的数据位于偏移i*sendcount处。

注意:这假设接收计数等于nranks*sendcount,这意味着recvbuff的大小至少应为nranks*sendcount个元素。

如果sendbuff == recvbuff + rank * sendcount,则会发生就地(in-place)操作。

相关链接:AllGather

mcclReduceScatter

mcclResult_t mcclReduceScatter(const void* sendbuff, void* recvbuff, size_t recvcount, mcclDataType_t datatype, mcclRedOp_t op, mcclComm_t comm, musaStream_t stream)

使用 op 操作将所有 GPU 上的 sendbuff 数据进行归约,并将归约结果分散到设备上,使得 rank irecvbuff 包含结果的第 i 个区块。

注意:这假设发送计数等于 nranks*recvcount,这意味着 sendbuff 应该至少有 nranks*recvcount 个元素的大小。

如果 recvbuff == sendbuff + rank * recvcount,则会发生就地(in-place)操作。

相关链接:ReduceScatter